import torch
x = torch.arange(4.0)
# 在計算y关于x的梯度之前，先创建变量存储梯度
x.requires_grad_(True)
x.grad #默认值为none
# 开始计算y 
y = 2 * torch.dot(x, x)
# 通过调用反向传播函数来自动计算y关于x每个分量的梯度


y.backward()
print(y)
x.grad
x.grad == 4 * x
print(x)
# 在默认情况下 pytorch会累计梯度，需要清除之前的值
x.grad.zero_()
y = x.sum()
y.backward()
print(y)
x.grad

# 对非标量调用‘backward’需要传入一个gradient参数，该参数指定微分函数
x.grad.zero_()
y = x*x
# 等价于y.backward(torch.ones(len(x)))
y.sum().backward()
x.grad
print(y)
